// Generated from code/ch25/Pie.g by ANTLR 4.9.0-SNAPSHOT


import { ATN } from "antlr4ts/atn/ATN";
import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer";
import { CharStream } from "antlr4ts/CharStream";
import { Lexer } from "antlr4ts/Lexer";
import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator";
import { NotNull } from "antlr4ts/Decorators";
import { Override } from "antlr4ts/Decorators";
import { RuleContext } from "antlr4ts/RuleContext";
import { Vocabulary } from "antlr4ts/Vocabulary";
import { VocabularyImpl } from "antlr4ts/VocabularyImpl";

import * as Utils from "antlr4ts/misc/Utils";


export class PieLexer extends Lexer {
	public static readonly T__0 = 1;
	public static readonly T__1 = 2;
	public static readonly T__2 = 3;
	public static readonly T__3 = 4;
	public static readonly T__4 = 5;
	public static readonly T__5 = 6;
	public static readonly T__6 = 7;
	public static readonly T__7 = 8;
	public static readonly T__8 = 9;
	public static readonly T__9 = 10;
	public static readonly T__10 = 11;
	public static readonly T__11 = 12;
	public static readonly T__12 = 13;
	public static readonly T__13 = 14;
	public static readonly T__14 = 15;
	public static readonly T__15 = 16;
	public static readonly T__16 = 17;
	public static readonly T__17 = 18;
	public static readonly T__18 = 19;
	public static readonly T__19 = 20;
	public static readonly T__20 = 21;
	public static readonly INT = 22;
	public static readonly FLOAT = 23;
	public static readonly CHAR = 24;
	public static readonly STRING = 25;
	public static readonly ID = 26;
	public static readonly NL = 27;
	public static readonly WS = 28;
	public static readonly SL_COMMENT = 29;

	// tslint:disable:no-trailing-whitespace
	public static readonly channelNames: string[] = [
		"DEFAULT_TOKEN_CHANNEL", "HIDDEN",
	];

	// tslint:disable:no-trailing-whitespace
	public static readonly modeNames: string[] = [
		"DEFAULT_MODE",
	];

	public static readonly ruleNames: string[] = [
		"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", 
		"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", 
		"T__17", "T__18", "T__19", "T__20", "INT", "FLOAT", "CHAR", "STRING", 
		"LETTER", "ID", "NL", "WS", "SL_COMMENT",
	];

	private static readonly _LITERAL_NAMES: Array<string | undefined> = [
		undefined, "'('", "')'", "'*'", "'+'", "'-'", "'=='", "'<'", "'='", "'return'", 
		"'print'", "'if'", "'else'", "'while'", "':'", "'.'", "'struct'", "'{'", 
		"','", "'}'", "'new'", "'def'",
	];
	private static readonly _SYMBOLIC_NAMES: Array<string | undefined> = [
		undefined, undefined, undefined, undefined, undefined, undefined, undefined, 
		undefined, undefined, undefined, undefined, undefined, undefined, undefined, 
		undefined, undefined, undefined, undefined, undefined, undefined, undefined, 
		undefined, "INT", "FLOAT", "CHAR", "STRING", "ID", "NL", "WS", "SL_COMMENT",
	];
	public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(PieLexer._LITERAL_NAMES, PieLexer._SYMBOLIC_NAMES, []);

	// @Override
	// @NotNull
	public get vocabulary(): Vocabulary {
		return PieLexer.VOCABULARY;
	}
	// tslint:enable:no-trailing-whitespace


	constructor(input: CharStream) {
		super(input);
		this._interp = new LexerATNSimulator(PieLexer._ATN, this);
	}

	// @Override
	public get grammarFileName(): string { return "Pie.g"; }

	// @Override
	public get ruleNames(): string[] { return PieLexer.ruleNames; }

	// @Override
	public get serializedATN(): string { return PieLexer._serializedATN; }

	// @Override
	public get channelNames(): string[] { return PieLexer.channelNames; }

	// @Override
	public get modeNames(): string[] { return PieLexer.modeNames; }

	public static readonly _serializedATN: string =
		"\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\x1F\xC1\b\x01" +
		"\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" +
		"\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" +
		"\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" +
		"\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t" +
		"\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t" +
		"\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x03\x02\x03\x02\x03\x03" +
		"\x03\x03\x03\x04\x03\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07" +
		"\x03\x07\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" +
		"\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\r\x03\r\x03" +
		"\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F" +
		"\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11" +
		"\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x14\x03\x14\x03\x15\x03\x15" +
		"\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x06\x17\x86\n" +
		"\x17\r\x17\x0E\x17\x87\x03\x18\x03\x18\x03\x18\x07\x18\x8D\n\x18\f\x18" +
		"\x0E\x18\x90\v\x18\x03\x18\x03\x18\x06\x18\x94\n\x18\r\x18\x0E\x18\x95" +
		"\x05\x18\x98\n\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x06" +
		"\x1A\xA0\n\x1A\r\x1A\x0E\x1A\xA1\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1C" +
		"\x03\x1C\x03\x1C\x07\x1C\xAB\n\x1C\f\x1C\x0E\x1C\xAE\v\x1C\x03\x1D\x05" +
		"\x1D\xB1\n\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1F" +
		"\x03\x1F\x07\x1F\xBB\n\x1F\f\x1F\x0E\x1F\xBE\v\x1F\x03\x1F\x03\x1F\x02" +
		"\x02\x02 \x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02" +
		"\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02" +
		"\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02" +
		"\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x027\x02\x1C9\x02" +
		"\x1D;\x02\x1E=\x02\x1F\x03\x02\x05\x04\x02C\\c|\x04\x02\v\v\"\"\x04\x02" +
		"\f\f\x0F\x0F\x02\xC8\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02" +
		"\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r" +
		"\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13" +
		"\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19" +
		"\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F" +
		"\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02" +
		"\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02" +
		"\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03" +
		"\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02" +
		"\x02\x02=\x03\x02\x02\x02\x03?\x03\x02\x02\x02\x05A\x03\x02\x02\x02\x07" +
		"C\x03\x02\x02\x02\tE\x03\x02\x02\x02\vG\x03\x02\x02\x02\rI\x03\x02\x02" +
		"\x02\x0FL\x03\x02\x02\x02\x11N\x03\x02\x02\x02\x13P\x03\x02\x02\x02\x15" +
		"W\x03\x02\x02\x02\x17]\x03\x02\x02\x02\x19`\x03\x02\x02\x02\x1Be\x03\x02" +
		"\x02\x02\x1Dk\x03\x02\x02\x02\x1Fm\x03\x02\x02\x02!o\x03\x02\x02\x02#" +
		"v\x03\x02\x02\x02%x\x03\x02\x02\x02\'z\x03\x02\x02\x02)|\x03\x02\x02\x02" +
		"+\x80\x03\x02\x02\x02-\x85\x03\x02\x02\x02/\x97\x03\x02\x02\x021\x99\x03" +
		"\x02\x02\x023\x9D\x03\x02\x02\x025\xA5\x03\x02\x02\x027\xA7\x03\x02\x02" +
		"\x029\xB0\x03\x02\x02\x02;\xB4\x03\x02\x02\x02=\xB8\x03\x02\x02\x02?@" +
		"\x07*\x02\x02@\x04\x03\x02\x02\x02AB\x07+\x02\x02B\x06\x03\x02\x02\x02" +
		"CD\x07,\x02\x02D\b\x03\x02\x02\x02EF\x07-\x02\x02F\n\x03\x02\x02\x02G" +
		"H\x07/\x02\x02H\f\x03\x02\x02\x02IJ\x07?\x02\x02JK\x07?\x02\x02K\x0E\x03" +
		"\x02\x02\x02LM\x07>\x02\x02M\x10\x03\x02\x02\x02NO\x07?\x02\x02O\x12\x03" +
		"\x02\x02\x02PQ\x07t\x02\x02QR\x07g\x02\x02RS\x07v\x02\x02ST\x07w\x02\x02" +
		"TU\x07t\x02\x02UV\x07p\x02\x02V\x14\x03\x02\x02\x02WX\x07r\x02\x02XY\x07" +
		"t\x02\x02YZ\x07k\x02\x02Z[\x07p\x02\x02[\\\x07v\x02\x02\\\x16\x03\x02" +
		"\x02\x02]^\x07k\x02\x02^_\x07h\x02\x02_\x18\x03\x02\x02\x02`a\x07g\x02" +
		"\x02ab\x07n\x02\x02bc\x07u\x02\x02cd\x07g\x02\x02d\x1A\x03\x02\x02\x02" +
		"ef\x07y\x02\x02fg\x07j\x02\x02gh\x07k\x02\x02hi\x07n\x02\x02ij\x07g\x02" +
		"\x02j\x1C\x03\x02\x02\x02kl\x07<\x02\x02l\x1E\x03\x02\x02\x02mn\x070\x02" +
		"\x02n \x03\x02\x02\x02op\x07u\x02\x02pq\x07v\x02\x02qr\x07t\x02\x02rs" +
		"\x07w\x02\x02st\x07e\x02\x02tu\x07v\x02\x02u\"\x03\x02\x02\x02vw\x07}" +
		"\x02\x02w$\x03\x02\x02\x02xy\x07.\x02\x02y&\x03\x02\x02\x02z{\x07\x7F" +
		"\x02\x02{(\x03\x02\x02\x02|}\x07p\x02\x02}~\x07g\x02\x02~\x7F\x07y\x02" +
		"\x02\x7F*\x03\x02\x02\x02\x80\x81\x07f\x02\x02\x81\x82\x07g\x02\x02\x82" +
		"\x83\x07h\x02\x02\x83,\x03\x02\x02\x02\x84\x86\x042;\x02\x85\x84\x03\x02" +
		"\x02\x02\x86\x87\x03\x02\x02\x02\x87\x85\x03\x02\x02\x02\x87\x88\x03\x02" +
		"\x02\x02\x88.\x03\x02\x02\x02\x89\x8A\x05-\x17\x02\x8A\x8E\x070\x02\x02" +
		"\x8B\x8D\x05-\x17\x02\x8C\x8B\x03\x02\x02\x02\x8D\x90\x03\x02\x02\x02" +
		"\x8E\x8C\x03\x02\x02\x02\x8E\x8F\x03\x02\x02\x02\x8F\x98\x03\x02\x02\x02" +
		"\x90\x8E\x03\x02\x02\x02\x91\x93\x070\x02\x02\x92\x94\x05-\x17\x02\x93" +
		"\x92\x03\x02\x02\x02\x94\x95\x03\x02\x02\x02\x95\x93\x03\x02\x02\x02\x95" +
		"\x96\x03\x02\x02\x02\x96\x98\x03\x02\x02\x02\x97\x89\x03\x02\x02\x02\x97" +
		"\x91\x03\x02\x02\x02\x980\x03\x02\x02\x02\x99\x9A\x07)\x02\x02\x9A\x9B" +
		"\v\x02\x02\x02\x9B\x9C\x07)\x02\x02\x9C2\x03\x02\x02\x02\x9D\x9F\x07$" +
		"\x02\x02\x9E\xA0\v\x02\x02\x02\x9F\x9E\x03\x02\x02\x02\xA0\xA1\x03\x02" +
		"\x02\x02\xA1\x9F\x03\x02\x02\x02\xA1\xA2\x03\x02\x02\x02\xA2\xA3\x03\x02" +
		"\x02\x02\xA3\xA4\x07$\x02\x02\xA44\x03\x02\x02\x02\xA5\xA6\t\x02\x02\x02" +
		"\xA66\x03\x02\x02\x02\xA7\xAC\x055\x1B\x02\xA8\xAB\x055\x1B\x02\xA9\xAB" +
		"\x042;\x02\xAA\xA8\x03\x02\x02\x02\xAA\xA9\x03\x02\x02\x02\xAB\xAE\x03" +
		"\x02\x02\x02\xAC\xAA\x03\x02\x02\x02\xAC\xAD\x03\x02\x02\x02\xAD8\x03" +
		"\x02\x02\x02\xAE\xAC\x03\x02\x02\x02\xAF\xB1\x07\x0F\x02\x02\xB0\xAF\x03" +
		"\x02\x02\x02\xB0\xB1\x03\x02\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2\xB3\x07" +
		"\f\x02\x02\xB3:\x03\x02\x02\x02\xB4\xB5\t\x03\x02\x02\xB5\xB6\x03\x02" +
		"\x02\x02\xB6\xB7\b\x1E\x02\x02\xB7<\x03\x02\x02\x02\xB8\xBC\x07%\x02\x02" +
		"\xB9\xBB\n\x04\x02\x02\xBA\xB9\x03\x02\x02\x02\xBB\xBE\x03\x02\x02\x02" +
		"\xBC\xBA\x03\x02\x02\x02\xBC\xBD\x03\x02\x02\x02\xBD\xBF\x03\x02\x02\x02" +
		"\xBE\xBC\x03\x02\x02\x02\xBF\xC0\b\x1F\x02\x02\xC0>\x03\x02\x02\x02\f" +
		"\x02\x87\x8E\x95\x97\xA1\xAA\xAC\xB0\xBC\x03\b\x02\x02";
	public static __ATN: ATN;
	public static get _ATN(): ATN {
		if (!PieLexer.__ATN) {
			PieLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(PieLexer._serializedATN));
		}

		return PieLexer.__ATN;
	}

}

